package com.vencent.spring.java.bean;

import org.springframework.context.annotation.Scope;
import org.springframework.context.annotation.ScopedProxyMode;
import org.springframework.stereotype.Component;
import org.springframework.web.context.WebApplicationContext;

/**
 * scope 可以配合注解Component 和 注解Bean
 * 非web应用只有两种域：
 * 单例    和   原型
 * web应用就有4种作用域：
 * 单例  singleton 或者 ConfigurableBeanFactory.SCOPE_SINGLETON
 * 原型  prototype 或者 ConfigurableBeanFactory.SCOPE_PROTOTYPE
 * 会话  session   或者 WebApplicationContext.SCOPE_SESSION
 * 请求  request   或者 WebApplicationContext.SCOPE_REQUEST
 * 
 * 以上这些你可以直接写字符串， 也可以通过类.变量方式使用， 但是在xml中你只能写字符串.
 * 如果声明了session或者request的 bean的作用域, 那么就会有两个问题：
 * 1.容器启动时，还没有创建会话或者请求，也就没有相关作用域的bean， 此时注入就会失败？
 * 2.有多个会话或者请求时，会产生很多相同类型的bean， 注入时注入哪个bean由什么决定？ 
 * spring 就会在一开始容器启动时注入相关代理(可以基于接口或者继承类),由注解scope的proxyMode属性决定
 * 当对被代理bean调用时， 其代理会进行懒解析并将调用委托给会话作用域内真正的bean对象。
 * 
 * @author wbw
 *
 */
@Component
@Scope(value=WebApplicationContext.SCOPE_SESSION,
		proxyMode=ScopedProxyMode.TARGET_CLASS)
public class Cart {
	
}
